//
//  NewInputModel.swift
//  JonCalculator
//
//  Created by shiyanjun on 2023/1/14.
//

import Foundation

class Model: ObservableObject {
    private let numbers: [String] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    private let sysbols: [String] = ["+", "-", "x", "/", "="]
    private var curSysbol: (num1: Double, sysbol: String, num2: Double)?
    @Published var displayValue: Double = 0
    
    // 处理输入
    func input(input: String) {
        switch input {
        case "AC":
            ac()
        case "+/-":
            toggle()
        case "%":
            percent()
        case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
            if curSysbol?.sysbol == nil {
                curSysbol?.num1 = (curSysbol?.num1 ?? 0) * 10 + Double(input)!
                displayValue = curSysbol?.num1 ?? 0
            } else {
                curSysbol?.num2 = (curSysbol?.num2 ?? 0) * 10 + Double(input)!
                displayValue = curSysbol?.num2 ?? 0
            }
        case "+", "-", "x", "/", "=":
            return
        default:
            return
        }
    }
    
    func sysbolInput(input: String) {
        switch input {
        case "+":
            curSysbol?.sysbol = input
        case "-":
            curSysbol?.sysbol = input
        case "x":
            curSysbol?.sysbol = input
        case "/":
            curSysbol?.sysbol = input
        default:
            return
        }
    }
    
    // 核心计算方法
    func calculate() {
        if let num1 = curSysbol?.num1,
           let num2 = curSysbol?.num2,
           let sysbol = curSysbol?.sysbol {
            switch sysbol {
            case "+":
                displayValue = num1 + num2
            case "-":
                displayValue =  num1 - num2
            case "x":
                displayValue =  num1 * num2
            case "/":
                displayValue =  num1 / num2
            default:
                displayValue = 0
            }
        }
    }
    
    // 归零
    func ac() {
        displayValue = 0
    }
    
    // 正负号
    func toggle() {
        displayValue = -displayValue
    }
    
    // 百分号
    func percent() {
        displayValue *= 0.01
    }
}
